package main

import (
	"fmt"
	"math/rand"
	"sort"
	"time"
)

// task1
func task1() {
	fmt.Println("s1,s2各有什么元素：~~~~~~~~~~~")
	fmt.Println("s1的元素为：[0,0,0]")
	fmt.Println("s2的元素为：[0,0,0,1]")
	fmt.Println("s1修改一个元素会影响s2吗？s2修改一个元素会影响s1吗？~~~~~")
	fmt.Println("s1修改一个元素会影响s2，s2若修改前3个元素会影响s1，若修改3个之后的元素不会影响s1，因为s1和s2指向的底层数组为一个。")
	fmt.Println("s2再增加一个元素会怎么样？~~~~~~~~~~~~~~~~~")
	fmt.Println("s2再增加一个元素，则底层数组会重新建一个，它的容量会由4扩容为8，这时候再修改s2的前3个元素，则不会影响s1,因为这时候s1和s2指向的底层数组不是一个。")
}

// task2
func task2() {
	s1 := [...]int{1, 4, 9, 16, 2, 5, 10, 15}
	s2 := make([]int, len(s1)-1)
	for i := 0; i < len(s1)-1; i++ {
		s2[i] = s1[i] + s1[i+1]
	}
	fmt.Println(s1)
	fmt.Printf("数组相邻数的和为：\n%v\n", s2)
}

// task3
func task3() {
	s3 := make([]int, 100)
	src := rand.NewSource(time.Now().UnixNano())
	rint := rand.New(src)
	for i := 0; i < 100; i++ {
		s3[i] = rint.Intn(401) - 200
	}
	sort.Ints(s3)
	fmt.Printf("100个整数按升序排列为：\n%v\n", s3)
	m1 := make(map[int]int)
	for _, i := range s3 {
		m1[i] += 1
	}
	fmt.Printf("各整数的重复次数为(map的key为整数，value为其重复的次数)：\n%v\n", m1)
}

func main() {
	fmt.Println("第一题**************************")
	task1()
	fmt.Println("第二题**************************")
	task2()
	fmt.Println("第三题**************************")
	task3()
}
